home *** CD-ROM | disk | FTP | other *** search
/ Greenhouse Effect Detection Expriment / NASA Greenhouse Effect Detection Expriment 1992 - Disc 2.iso / software / dos / cdf22pc / src / test / qst2ic.c < prev   
Encoding:
C/C++ Source or Header  |  1992-02-28  |  15.8 KB  |  497 lines

  1. /******************************************************************************
  2. *
  3. *  NSSDC/CDF              Quick Start Test Program (INTERNAL interface/C).
  4. *
  5. *  Version 1.4, 29-Feb-92, ST Systems (STX)
  6. *
  7. *  Modification history:
  8. *
  9. *   V1.0  27-May-91, J Love    Original version (for CDF V2.1).
  10. *   V1.1  25-Jun-91, J Love    Renamed CDF for portability.
  11. *   V1.2   2-Aug-91, J Love    Use 'Exit'/'ExitBAD'.  Use 'CDFlib'.
  12. *   V1.3  24-Oct-91, J Love    Modified for IBM-PC port.
  13. *   V1.4  28-Feb-92, J Love    CDF V2.2.
  14. *
  15. ******************************************************************************/
  16.  
  17. #include <stdio.h>
  18.  
  19. #include "cdfdist.h"
  20.  
  21. #define N_DIMS        2
  22. #define DIM_0_SIZE    2
  23. #define DIM_1_SIZE    3
  24.  
  25.  
  26. #define stop(message) { \
  27. printf ("OOPS (%s)\n", message); \
  28. ExitBAD; \
  29. }
  30.  
  31. main ()
  32. {
  33. CDFid        id;
  34. CDFstatus    status;
  35. long        dim_n;
  36. static long    encoding = NETWORK_ENCODING;
  37. static long    actual_encoding = NETWORK_ENCODING;
  38. static long    majority = ROW_MAJOR;
  39. static long    numDims = N_DIMS;
  40. static long    dimSizes[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
  41. static long    var1DataType = { CDF_INT4 };
  42. static long    var2DataType = { CDF_REAL4 };
  43. long        var1DataType_out, var2DataType_out;
  44. static long    var1NumElements = { 1 };
  45. static long    var2NumElements = { 1 };
  46. long        var1NumElements_out, var2NumElements_out;
  47. long        var1Num_out, var2Num_out;
  48. static long    var1Values[DIM_0_SIZE][DIM_1_SIZE] = { 1, 2, 3, 4, 5, 6 };
  49. static float    var2Values[DIM_0_SIZE][DIM_1_SIZE] = { 1., 2., 3., 4., 5., 6. };
  50. long        indices[N_DIMS];
  51. static long    recNum = { 0 };
  52. long        var1Value_out;
  53. float        var2Value_out;
  54. static long    recStart = { 0 };
  55. static long    recCount = { 1 };
  56. static long    recInterval = { 1 };
  57. static long    counts[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
  58. static long    intervals[N_DIMS] = { 1, 1 };
  59. long        var1Buffer_out[DIM_0_SIZE][DIM_1_SIZE];
  60. float        var2Buffer_out[DIM_0_SIZE][DIM_1_SIZE];
  61. long        attrNum_out;
  62. static long    entryNum = { 2 };
  63. long        maxEntry_out;
  64. static long    attrScope = { GLOBAL_SCOPE_ASSUMED };
  65. long        attrScope_out;
  66. static long    new_attrScope = { GLOBAL_SCOPE };
  67. static long    attrDataType = { CDF_INT4 };
  68. long        attrDataType_out;
  69. static long    attrNumElements = { 1 };
  70. long        attrNumElements_out;
  71. static long    attrValue = { 1 };
  72. long        attrValue_out;
  73. long        encoding_out;
  74. long        majority_out;
  75. long        numDims_out;
  76. long        dimSizes_out[N_DIMS];
  77. long        maxRec_out;
  78. long        numVars_out;
  79. long        numAttrs_out;
  80. long        version_out;
  81. long        release_out;
  82. long        increment_out;
  83. char        subincrement_out;
  84.  
  85. long        x0, x1, x;
  86.  
  87. static long    var1RecVariance = { VARY };
  88. static long    var2RecVariance = { VARY };
  89. long        var1RecVariance_out, var2RecVariance_out;
  90. static long    var1DimVariances[N_DIMS] = { VARY, VARY };
  91. static long    var2DimVariances[N_DIMS] = { VARY, VARY };
  92. long        var1DimVariances_out[N_DIMS], var2DimVariances_out[N_DIMS];
  93.  
  94. static char    var1Name[] = "VAR1a";
  95. static char    var2Name[] = "VAR2a";
  96. static char    new_var1Name[] = "VAR1b";
  97. static char    new_var2Name[] = "VAR2b";
  98. char        var1Name_out[CDF_VAR_NAME_LEN+1],
  99.         var2Name_out[CDF_VAR_NAME_LEN+1];
  100. static char    attrName[] = "ATTR1";
  101. static char    new_attrName[] = "ATTR2";
  102. char        attrName_out[CDF_ATTR_NAME_LEN];
  103. char        CopyRightText[CDF_COPYRIGHT_LEN+1];
  104. char        errorText[CDF_STATUSTEXT_LEN+1];
  105.  
  106. /*****************************************************************************/
  107.  
  108. printf ("\n\nTesting Internal/C interface...\n\n");
  109.  
  110. /******************************************************************************
  111. *  Create CDF.
  112. ******************************************************************************/
  113.  
  114. status = CDFlib (CREATE_, CDF_, "QST2IC", numDims, dimSizes, &id,
  115.          PUT_, CDF_ENCODING_, encoding,
  116.                CDF_MAJORITY_, majority,
  117.                CDF_FORMAT_, SINGLE_FILE,
  118.          NULL_);
  119.  
  120. if (status < CDF_OK) {
  121.   if (status == CDF_EXISTS) {
  122.     status = CDFlib (OPEN_, CDF_, "QST2IC", &id,
  123.              NULL_);
  124.     if (status < CDF_OK) stop ("1.0");
  125.  
  126.     status = CDFlib (SELECT_, CDF_, id,
  127.              DELETE_, CDF_,
  128.              NULL_);
  129.     if (status < CDF_OK) stop ("1.1");
  130.  
  131.     status = CDFlib (CREATE_, CDF_, "QST2IC", numDims, dimSizes, &id,
  132.              PUT_, CDF_ENCODING_, encoding,
  133.                CDF_MAJORITY_, majority,
  134.                CDF_FORMAT_, SINGLE_FILE,
  135.              NULL_);
  136.     if (status < CDF_OK) stop ("1.2");
  137.   }
  138.   else
  139.     stop ("1.3");
  140. }
  141.  
  142. /******************************************************************************
  143. *  Create variables.
  144. ******************************************************************************/
  145.  
  146. status = CDFlib (SELECT_, CDF_, id,
  147.          CREATE_, VAR_, var1Name, var1DataType, var1NumElements,
  148.                 var1RecVariance, var1DimVariances,
  149.                 &var1Num_out,
  150.               VAR_, var2Name, var2DataType, var2NumElements,
  151.                 var2RecVariance, var2DimVariances,
  152.                 &var2Num_out,
  153.          NULL_);
  154. if (status < CDF_OK) stop ("2.0");
  155.  
  156. /******************************************************************************
  157. *  Close CDF.
  158. ******************************************************************************/
  159.  
  160. status = CDFlib (SELECT_, CDF_, id,
  161.          CLOSE_, CDF_,
  162.          NULL_);
  163. if (status < CDF_OK) stop ("3.0");
  164.  
  165. /******************************************************************************
  166. *  Reopen CDF.
  167. ******************************************************************************/
  168.  
  169. status = CDFlib (OPEN_, CDF_, "QST2IC", &id,
  170.          NULL_);
  171. if (status < CDF_OK) stop ("4.0");
  172.  
  173. /******************************************************************************
  174. *  Delete CDF.
  175. ******************************************************************************/
  176.  
  177. status = CDFlib (SELECT_, CDF_, id,
  178.          DELETE_, CDF_,
  179.          NULL_);
  180. if (status < CDF_OK) stop ("5.0");
  181.  
  182. /******************************************************************************
  183. *  Create CDF again (previous delete will allow this).
  184. ******************************************************************************/
  185.  
  186. status = CDFlib (CREATE_, CDF_, "QST2IC", numDims, dimSizes, &id,
  187.          PUT_, CDF_ENCODING_, encoding,
  188.                CDF_MAJORITY_, majority,
  189.                CDF_FORMAT_, SINGLE_FILE,
  190.          NULL_);
  191. if (status < CDF_OK) stop ("6.0");
  192.  
  193. /******************************************************************************
  194. *  Create variables.
  195. ******************************************************************************/
  196.  
  197. status = CDFlib (SELECT_, CDF_, id,
  198.          CREATE_, VAR_, var1Name, var1DataType, var1NumElements,
  199.                 var1RecVariance, var1DimVariances,
  200.                 &var1Num_out,
  201.               VAR_, var2Name, var2DataType, var2NumElements,
  202.                 var2RecVariance, var2DimVariances,
  203.                 &var2Num_out,
  204.          NULL_);
  205. if (status < CDF_OK) stop ("7.0");
  206.  
  207. /******************************************************************************
  208. *  PUT to variables.
  209. ******************************************************************************/
  210.  
  211. status = CDFlib (SELECT_, CDF_, id,
  212.               CDF_RECNUMBER_, recNum,
  213.          NULL_);
  214. if (status < CDF_OK) stop ("8.0");
  215.  
  216. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  217.    for (x1 = 0; x1 < DIM_1_SIZE; x1++)
  218.       {
  219.       indices[0] = x0;
  220.       indices[1] = x1;
  221.       status = CDFlib (SELECT_, CDF_, id,
  222.                 CDF_DIMINDICES_, indices,
  223.                 VAR_, var1Num_out,
  224.                PUT_, VAR_DATA_, &var1Values[x0][x1],
  225.                SELECT_, VAR_, var2Num_out,
  226.                PUT_, VAR_DATA_, &var2Values[x0][x1],
  227.                NULL_);
  228.       if (status < CDF_OK) stop ("8.1");
  229.       }
  230.  
  231. /******************************************************************************
  232. *  GET from the variable.
  233. ******************************************************************************/
  234.  
  235. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  236.    for (x1 = 0; x1 < DIM_1_SIZE; x1++)
  237.       {
  238.       indices[0] = x0;
  239.       indices[1] = x1;
  240.       status = CDFlib (SELECT_, CDF_, id,
  241.                 CDF_DIMINDICES_, indices,
  242.                 VAR_, var1Num_out,
  243.                GET_, VAR_DATA_, &var1Value_out,
  244.                SELECT_, VAR_, var2Num_out,
  245.                GET_, VAR_DATA_, &var2Value_out,
  246.                NULL_);
  247.       if (status < CDF_OK) stop ("9.0");
  248.  
  249.       if (var1Value_out != var1Values[x0][x1]) stop ("9.1");
  250.       if (var2Value_out != var2Values[x0][x1]) stop ("9.2");
  251.       }
  252.  
  253. /******************************************************************************
  254. *  HyperPUT to the variable.
  255. ******************************************************************************/
  256.  
  257. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  258.    for (x1 = 0; x1 < DIM_1_SIZE; x1++) {
  259.       var1Values[x0][x1] = -var1Values[x0][x1];
  260.       var2Values[x0][x1] = -var2Values[x0][x1];
  261.    }
  262.  
  263. indices[0] = 0;
  264. indices[1] = 0;
  265.  
  266. status = CDFlib (SELECT_, CDF_, id,
  267.               CDF_RECNUMBER_, recStart,
  268.               CDF_RECCOUNT_, recCount,
  269.               CDF_RECINTERVAL_, recInterval,
  270.               CDF_DIMINDICES_, indices,
  271.               CDF_DIMCOUNTS_, counts,
  272.               CDF_DIMINTERVALS_, intervals,
  273.               VAR_, var1Num_out,
  274.          PUT_, VAR_HYPERDATA_, var1Values,
  275.          SELECT_, VAR_, var2Num_out,
  276.          PUT_, VAR_HYPERDATA_, var2Values,
  277.          NULL_);
  278. if (status < CDF_OK) stop ("10.0");
  279.  
  280. /******************************************************************************
  281. *  HyperGET from variable.
  282. ******************************************************************************/
  283.  
  284. status = CDFlib (SELECT_, CDF_, id,
  285.               CDF_RECNUMBER_, recStart,
  286.               CDF_RECCOUNT_, recCount,
  287.               CDF_RECINTERVAL_, recInterval,
  288.               CDF_DIMINDICES_, indices,
  289.               CDF_DIMCOUNTS_, counts,
  290.               CDF_DIMINTERVALS_, intervals,
  291.               VAR_, var1Num_out,
  292.          GET_, VAR_HYPERDATA_, var1Buffer_out,
  293.          SELECT_, VAR_, var2Num_out,
  294.          GET_, VAR_HYPERDATA_, var2Buffer_out,
  295.          NULL_);
  296. if (status < CDF_OK) stop ("11.0");
  297.  
  298. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  299.    for (x1 = 0; x1 < DIM_1_SIZE; x1++) {
  300.       if (var1Buffer_out[x0][x1] != var1Values[x0][x1]) stop ("11.1");
  301.       if (var2Buffer_out[x0][x1] != var2Values[x0][x1]) stop ("11.2");
  302.    }
  303.  
  304. /******************************************************************************
  305. *  Create attribute.
  306. ******************************************************************************/
  307.  
  308. status = CDFlib (SELECT_, CDF_, id,
  309.          CREATE_, ATTR_, attrName, attrScope, &attrNum_out,
  310.          NULL_);
  311. if (status < CDF_OK) stop ("12.0");
  312.  
  313. /******************************************************************************
  314. *  PUT to attribute.
  315. ******************************************************************************/
  316.  
  317. status = CDFlib (SELECT_, CDF_, id,
  318.               ENTRY_, entryNum,
  319.          PUT_, ENTRY_DATA_, attrDataType, attrNumElements, &attrValue,
  320.          NULL_);
  321. if (status < CDF_OK) stop ("13.0");
  322.  
  323. /******************************************************************************
  324. *  GET from attribute.
  325. ******************************************************************************/
  326.  
  327. status = CDFlib (SELECT_, CDF_, id,
  328.          GET_, ENTRY_DATA_, &attrValue_out,
  329.          NULL_);
  330. if (status < CDF_OK) stop ("14.0");
  331.  
  332. /******************************************************************************
  333. *  Get CDF documentation.
  334. ******************************************************************************/
  335.  
  336. status = CDFlib (GET_, LIB_VERSION_, &version_out,
  337.                LIB_RELEASE_, &release_out,
  338.                LIB_INCREMENT_, &increment_out,
  339.                LIB_subINCREMENT_, &subincrement_out,
  340.                LIB_COPYRIGHT_, CopyRightText,
  341.          NULL_);
  342. if (status < CDF_OK) stop ("15.0");
  343.  
  344. printf ("CDF V%ld.%ld.%ld%c\n", version_out, release_out, increment_out,
  345.                 subincrement_out);
  346. printf ("%s\n", CopyRightText);
  347.  
  348. /******************************************************************************
  349. *  Inquire CDF.
  350. ******************************************************************************/
  351.  
  352. status = CDFlib (SELECT_, CDF_, id,
  353.          GET_, CDF_NUMDIMS_, &numDims_out,
  354.                CDF_DIMSIZES_, dimSizes_out,
  355.                CDF_ENCODING_, &encoding_out,
  356.                CDF_MAJORITY_, &majority_out,
  357.                CDF_MAXREC_, &maxRec_out,
  358.                CDF_NUMVARS_, &numVars_out,
  359.                CDF_NUMATTRS_, &numAttrs_out,
  360.          NULL_);
  361. if (status < CDF_OK) stop ("16.0");
  362.  
  363. if (numDims_out != numDims) stop ("16.1");
  364. for (x = 0; x < N_DIMS; x++)
  365.    if (dimSizes_out[x] != dimSizes[x]) stop ("16.2");
  366. if (encoding_out != actual_encoding) stop ("16.3");
  367. if (majority_out != majority) stop ("16.4");
  368. if (maxRec_out != 0) stop ("16.5");
  369. if (numVars_out != 2) stop ("16.6");
  370. if (numAttrs_out != 1) stop ("16.7");
  371.  
  372. /******************************************************************************
  373. *  Rename variables.
  374. ******************************************************************************/
  375.  
  376. status = CDFlib (SELECT_, CDF_, id,
  377.               VAR_NAME_, var1Name,
  378.          PUT_, VAR_NAME_, new_var1Name,
  379.          SELECT_, VAR_NAME_, var2Name,
  380.          PUT_, VAR_NAME_, new_var2Name,
  381.          NULL_);
  382. if (status < CDF_OK) stop ("17.0");
  383.  
  384. /******************************************************************************
  385. *  Inquire variable.
  386. ******************************************************************************/
  387.  
  388. status = CDFlib (SELECT_, CDF_, id,
  389.               VAR_, var1Num_out,
  390.          GET_, VAR_NAME_, var1Name_out,
  391.                VAR_DATATYPE_, &var1DataType_out,
  392.                VAR_NUMELEMS_, &var1NumElements_out,
  393.                VAR_RECVARY_, &var1RecVariance_out,
  394.                VAR_DIMVARYS_, var1DimVariances_out,
  395.          SELECT_, VAR_, var2Num_out,
  396.          GET_, VAR_NAME_, var2Name_out,
  397.                VAR_DATATYPE_, &var2DataType_out,
  398.                VAR_NUMELEMS_, &var2NumElements_out,
  399.                VAR_RECVARY_, &var2RecVariance_out,
  400.                VAR_DIMVARYS_, var2DimVariances_out,
  401.          NULL_);
  402. if (status < CDF_OK) stop ("18.0");
  403.  
  404. if (strcmp(var1Name_out,new_var1Name) != 0) stop ("18.11");
  405. if (var1DataType_out != var1DataType) stop ("18.12");
  406. if (var1NumElements_out != var1NumElements) stop ("18.13");
  407. if (var1RecVariance_out != var1RecVariance) stop ("18.14");
  408.  
  409. for (dim_n = 0; dim_n < numDims; dim_n++)
  410.    if (var1DimVariances_out[dim_n] != var1DimVariances[dim_n]) stop ("18.14");
  411.  
  412. if (strcmp(var2Name_out,new_var2Name) != 0) stop ("18.21");
  413. if (var2DataType_out != var2DataType) stop ("18.22");
  414. if (var2NumElements_out != var2NumElements) stop ("18.23");
  415. if (var2RecVariance_out != var2RecVariance) stop ("18.24");
  416.  
  417. for (dim_n = 0; dim_n < numDims; dim_n++)
  418.    if (var2DimVariances_out[dim_n] != var2DimVariances[dim_n]) stop ("18.24");
  419.  
  420. /******************************************************************************
  421. *  Rename attribute.
  422. ******************************************************************************/
  423.  
  424. status = CDFlib (SELECT_, CDF_, id,
  425.               ATTR_NAME_, attrName,
  426.          PUT_, ATTR_NAME_, new_attrName,
  427.          NULL_);
  428. if (status < CDF_OK) stop ("20.0");
  429.  
  430. /******************************************************************************
  431. *  Correct attribute scope.
  432. ******************************************************************************/
  433.  
  434. status = CDFlib (SELECT_, CDF_, id,
  435.          PUT_, ATTR_SCOPE_, new_attrScope,
  436.          NULL_);
  437. if (status < CDF_OK) stop ("21.0");
  438.  
  439. /******************************************************************************
  440. *  Inquire attribute.
  441. ******************************************************************************/
  442.  
  443. status = CDFlib (SELECT_, CDF_, id,
  444.          GET_, ATTR_NAME_, attrName_out,
  445.                ATTR_SCOPE_, &attrScope_out,
  446.                ATTR_MAXENTRY_, &maxEntry_out,
  447.          NULL_);
  448. if (status < CDF_OK) stop ("22.0");
  449.  
  450. if (strcmp(attrName_out,new_attrName) != 0) stop ("22.1");
  451. if (attrScope_out != attrScope_out) stop ("22.2");
  452. if (maxEntry_out != entryNum) stop ("22.3");
  453.  
  454. /******************************************************************************
  455. *  Inquire attribute entry.
  456. ******************************************************************************/
  457.  
  458. status = CDFlib (SELECT_, CDF_, id,
  459.               ENTRY_, entryNum,
  460.          GET_, ENTRY_DATATYPE_, &attrDataType_out,
  461.                ENTRY_NUMELEMS_, &attrNumElements_out,
  462.          NULL_);
  463. if (status < CDF_OK) stop ("23.0");
  464.  
  465. if (attrDataType_out != attrDataType) stop ("23.1");
  466. if (attrNumElements_out != attrNumElements) stop ("23.1");
  467.  
  468. /******************************************************************************
  469. *  Get error text.
  470. ******************************************************************************/
  471.  
  472. status = CDFlib (SELECT_, CDF_STATUS_, CDF_OK,
  473.          GET_, STATUS_TEXT_, errorText,
  474.          NULL_);
  475. if (status < CDF_OK) stop ("24.0");
  476.  
  477. printf ("%s\n", errorText);
  478.  
  479. /******************************************************************************
  480. *  Close CDF.
  481. ******************************************************************************/
  482.  
  483. status = CDFlib (SELECT_, CDF_, id,
  484.          CLOSE_, CDF_,
  485.          NULL_);
  486. if (status < CDF_OK) stop ("25.0");
  487.  
  488. /*****************************************************************************/
  489.  
  490. printf ("\nTEST SUCCESSFUL\n");
  491. Exit;
  492.  
  493. #if defined(__MSDOS__)
  494. return;
  495. #endif
  496. }
  497.